Most modern electronic devices contain memory for storing data either temporarily or long-term, such as televisions that store the last channel viewed, cellular telephones that store telephone numbers and information about incoming calls, etc. A wide variety of memory systems are known, such as random-access memories and stack-type memories. Each type of memory system has strengths and weaknesses and is used in different types of applications. For example, random-access memories are commonly used when a great deal of storage space is required and each piece of data must be individually accessible at any time. A random-access memory requires relatively complex addressing circuitry, enabling each piece of data to be addressed and retrieved at any time, in any order.
For other applications, simpler memory systems may be acceptable or desirable. In one such memory system, data is sequentially stored in a list and retrieved in a predetermined order, rather than each piece of data being individually addressable and accessible at any time. As data is written into the memory, it fills the memory as if adding to a pile of data. As data is read out of the memory, it empties the memory, leaving room for more data to be written. A typical memory is a first-in first-out (FIFO) memory, in which the first piece of data written to an input of the FIFO will be the first piece of data read back from an output of the FIFO. A common application for memory systems is as a communications buffer between two electronic circuits. If the first electronic circuit sends a stream of data to the second electronic circuit, the second typically must temporarily store or buffer the data as it arrives, until it is ready to use the data. If the second electronic circuit uses the data in the order in which it is received, there is typically no need to randomly access the pieces of data in any other order, and a FIFO is a simple and inexpensive storage device fitting these requirements.
One disadvantage of a memory is that it can overflow and lose data if it continues to receive data after becoming full, before any data is read from the memory to free up space.